package com.scs.application.modules.base.controller;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.scs.application.core.mvc.controller.CrudController;
import com.scs.application.core.query.QueryContext;
import com.scs.application.core.query.QueryContextHolder;
import com.scs.application.modules.base.entity.MatrUnit;
import com.scs.application.modules.base.service.MatrUnitService;
import com.scs.application.modules.sys.model.PageResult;
import com.scs.application.modules.sys.model.RestResult;
import com.google.common.collect.Maps;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 耗材单位 前端控制器
 * </p>
 */
@RestController
@RequestMapping("/base/matrUnit")
public class MatrUnitController extends CrudController<MatrUnitService, MatrUnit> {
    /**
     * 根据耗材获取耗材的包装单位
     * @param matrId
     * @return
     */
    @GetMapping("getByMatr")
    public RestResult getByMatr(@RequestParam("matrId") String matrId) {
        List matrUnitList = service.list(new QueryWrapper<MatrUnit>().eq("matr_id", matrId));
        return RestResult.ok("获取数据成功",matrUnitList);
    }

    /**
     * 根据耗材获取耗材的基准包装单位
     * @param matrId
     * @return
     */
    @GetMapping("getBaseByMatr")
    public RestResult getBaseByMatr(@RequestParam("matrId") String matrId) {
        List matrUnitList = service.list(new QueryWrapper<MatrUnit>().eq("matr_id", matrId).eq("flag_base","1"));
        return RestResult.ok("获取数据成功",matrUnitList);
    }


    /**
     * 添加/更新数据
     */
    @PostMapping("/save")
    public RestResult saveItem(@Valid @RequestBody MatrUnit entity) {
        boolean isOk = service.saveOrUpdate(entity);
        if (!isOk) {
            return RestResult.error("数据保存失败");
        }
        return RestResult.ok("数据保存成功",  entity);
    }

    /**
     * 添加/更新数据
     */
    @PostMapping("/updateProperty")
    public RestResult updateItem(@Valid @RequestBody MatrUnit entity) {
        boolean isOk = service.updateItem(entity);
        if (!isOk) {
            return RestResult.error("数据保存失败");
        }
        return RestResult.ok("数据保存成功",  entity);
    }


    /**
     * 删除数据
     */
    @DeleteMapping("/delete")
    public RestResult deleteItems(@RequestBody Map<String, Object> para) {
        List<Serializable> ids = (List<Serializable>) para.get("ids");
        Boolean isOk = service.removeCascadeByIds(ids);
        if (!isOk) {
            return RestResult.error("数据删除失败");
        }
        return RestResult.ok("数据删除成功");
    }

    /**
     * 获取数据列表 选择使用
     */
    @GetMapping("/pageForSelect")
    public PageResult pageForSelect(@RequestParam Map<String, Object> reqData) {
        QueryContext queryContext = QueryContextHolder.currentContext();
        Map<String, Object> userParam =null;
        //固定参数
        if(reqData.containsKey("userParam")){
            JSONObject ob = JSON.parseObject(reqData.get("userParam")+"");
            userParam= Maps.newHashMap(ob);
        }

        //排除掉隐藏的单位
        queryContext.getWrapper().ne("flag_hide",1);
        IPage pageResult = service.pageForSelect(queryContext,userParam);
        return PageResult.ok("查询成功", pageResult.getRecords(), pageResult.getTotal());
    }

    /**
     * 获取数据列表
     */
    @GetMapping("/page")
    @Override
    public PageResult page() {
        QueryContext queryContext = QueryContextHolder.currentContext();
        //排除掉隐藏的单位
        queryContext.getWrapper().ne("flag_hide",1);
        IPage pageResult = service.page(queryContext);
        return PageResult.ok("查询成功", pageResult.getRecords(), pageResult.getTotal());
    }

    @GetMapping("/list")
    @Override
    public RestResult<List> list() {
        QueryContext queryContext = QueryContextHolder.currentContext();
        //排除掉隐藏的单位
        queryContext.getWrapper().ne("flag_hide",1);
        List result = service.list(queryContext);
        return RestResult.ok("查询成功", result);
    }
}
